package com.shph.validation.anno;

import com.shph.validation.Validator;
import com.shph.validation.rule.IRule;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 配合校验器使用，声明在需要校验的对象属性上，该属性可以没有 getter 方法
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Rule {
    // 校验失败异常提示信息
    String errorMsg() default "";

    // 一些校验需要参数值传递
    String refValue() default "";

    // 使用指定 IRule 实现类校验
    Class<? extends IRule> rule() default IRule.class;

    // 和 rule 二选一，选择校验策略，如果 rule 和 strategy 都有值，默认 rule
    Validator.Strategy strategy() default Validator.Strategy.NOT_NULL;
}
